def BS(zoz, val):
left = 0; right = len(zoz)-1
while (right-1>left):
mid = (left+right)//2
if (zoz[mid]<val):
left = mid
else:
right = mid
if (zoz[left]>=val):
return left
else:
return right
for _ in range(int(input())):
n, q = map(int, input().split())
zoz = [int(x) for x in input().split()]
zoz.sort(); zoz.reverse()
pref = [zoz[0]]
for i in range(1, n):
pref.append(zoz[i] + pref[-1])
for i in range(q):
query = int(input())
if (query>pref[-1]):
print(-1)
else:
print(BS(pref, query)+1)
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool chk(int mid,vector<int >&s,int x){
int i;
int sum=0;
if(s[mid]>=x){
return true;
}
else{
return false;
}
}
int32_t main(){
int t;
cin>>t;
while(t--){
int n,q;
cin>>n>>q;
vector<int >sugar(n);
int i,c=0;
for(i=0;i<n;i++){
cin>>sugar[i];
}
for(i=0;i<n;i++){
c+=sugar[i];
}
sort(sugar.begin(),sugar.end());
reverse(sugar.begin(),sugar.end());
vector<int> prefix(n);
prefix[0]=sugar[0];
for(i=1;i<n;i++){
prefix[i]=sugar[i]+prefix[i-1];
}
while(q--){
int x;
cin>>x;
if(x>c){
cout<<-1<<endl;
}
else{
int l=0,r=n-1;
int mid,ans;
while(l<=r){
mid= l+(r-l)/2;
if(chk(mid,prefix,x)){
ans=mid+1;
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<ans<<endl;
}
}
}
return 0;
}
292B - Network Topology | 1339A - Filling Diamonds |
910A - The Way to Home | 617A - Elephant |
48A - Rock-paper-scissors | 294A - Shaass and Oskols |
1213A - Chips Moving | 490A - Team Olympiad |
233A - Perfect Permutation | 1360A - Minimal Square |
467A - George and Accommodation | 893C - Rumor |
227B - Effective Approach | 1534B - Histogram Ugliness |
1611B - Team Composition Programmers and Mathematicians | 110A - Nearly Lucky Number |
1220B - Multiplication Table | 1644A - Doors and Keys |
1644B - Anti-Fibonacci Permutation | 1610A - Anti Light's Cell Guessing |
349B - Color the Fence | 144A - Arrival of the General |
1106A - Lunar New Year and Cross Counting | 58A - Chat room |
230A - Dragons | 200B - Drinks |
13A - Numbers | 129A - Cookies |
1367B - Even Array | 136A - Presents |